#ifndef FILEUTILS_H
#define FILEUTILS_H

#include "encryptutil.h"

#include <QString>
#include <QVector>
#include <QFile>
#include <QSettings>
#include <QByteArray>
#include <QJsonDocument>

/// @brief file todo utils
/// 负责词库导入导出、加密读写、权限检查、最近文件记录
/// 负责JSON格式词库的导入导出、基于EncryptUtil的加密读写、权限检查、最近文件记录
class FileUtils
{	
public:
	enum EncryptMode {
		NoEncrypt,   // 不加密（明文JSON）
        Aes256Encrypt // AES-256-CBC加密（EncryptUtil标准）
	};

	// 词库文件操作
	static QVector<QPair<QString, int>> importDict(const QString& filePath, EncryptMode mode, const QString& key = "");
	static bool exportDict(const QVector<QPair<QString, int>>& words, const QString& filePath, EncryptMode mode, const QString& key = "");

	// 加密文件读写
	static QByteArray readEncryptedFile(const QString& filePath, EncryptMode mode, const QString& key = "");
	static bool writeEncryptedFile(const QString& filePath, const QByteArray& content, EncryptMode mode, const QString& key = "");

	// 权限与路径
	static bool checkFilePermission(const QString& filePath, bool needRead = true, bool needWrite = false);
    static QString getCrossPlatformPath(const QString& rawPath);

	// 最近文件记录
	static void addRecentFile(const QString& filePath);
    static QVector<QString> getRecentFiles();

private:
	FileUtils() = default; // 禁止实例化
	~FileUtils();

	// helper
	static QByteArray getEncryptionKey(const QString& key);		// 统一密钥生成（复用EncryptUtil逻辑）
	// JSON序列化/反序列化
	static QByteArray serializeToJson(const QVector<QPair<QString, int>>& words);
    static QVector<QPair<QString, int>> deserializeFromJson(const QByteArray& jsonData);
	static QSettings& getSettings();							// 配置存储

};


#endif	// FILEUTILS_H